热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

更多|多样性_Paddle点灯人之10分钟快速上手Paddle

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Paddle点灯人之10分钟快速上手Paddle相关的知识,希望对你有一定的参考价值。Paddle点灯

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Paddle 点灯人 之 10分钟快速上手Paddle相关的知识,希望对你有一定的参考价值。



Paddle 点灯人 之 10分钟快速上手Paddle

文章目录


  • Paddle 点灯人 之 10分钟快速上手Paddle
    • 一、快速安装飞桨
    • 二、导入飞桨
    • 三、实践:手写数字识别任务
      • 3.1 数据集定义与加载
      • 3.2 模型组网
      • 3.3 模型训练与评估
        • 3.3.1 模型训练
        • 3.3.2 模型评估

      • 3.4 模型推理
        • 3.4.1 模型保存
        • 3.4.2 模型加载并执行推理


    • 四、总结



这个是参考了飞浆的
10分钟快速上手,也可以去AI studio中快速运行

从完成一个简单的『手写数字识别任务』开始,可快速了解深度学习模型开发的大致流程,并初步掌握飞桨框架 API 的使用方法。


一、快速安装飞桨

如果已经安装好飞桨那么可以跳过此步骤。飞桨支持很多种安装方式,这里介绍其中一种简单的安装命令。



注:目前飞桨支持 Python 3.6 ~ 3.9 版本,pip3 要求 20.2.2 或更高版本,请提前安装对应版本的 Python 和 pip 工具。


# 使用 pip 工具安装飞桨 CPU 版
!python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

该命令用于安装 CPU 版本的飞桨。如果要安装其他计算平台或操作系统支持的版本,可点击 快速安装 查看安装引导。


二、导入飞桨

安装完成后,需要在Python解释器中使用 import 导入飞桨,即可开始实践深度学习任务。

若操作成功,会输出飞桨的版本号。

import paddle
print(paddle.__version__)

2.2.1

三、实践:手写数字识别任务

『手写数字识别』是深度学习里的 Hello World 任务,用于对 0 ~ 9 的十类数字进行分类,即输入手写数字的图片,可识别出这个图片中的数字。

本任务用到的数据集为 MNIST 手写数字数据集,用于训练和测试模型。该数据集包含 60000 张训练图片、 10000 张测试图片、以及对应的分类标签文件,每张图片上是一个 0 ~ 9 的手写数字,分辨率为 28 * 28。部分图像和对应的分类标签如下图所示。



图 1:MNIST 数据集样例

开始之前,需要使用下面的命令安装 Python 的 matplotlib 库和 numpy 库,matplotlib 库用于可视化图片,numpy 库用于处理数据。

# 使用 pip 工具安装 matplotlib 和 numpy
!python3 -m pip install matplotlib numpy -i https://mirror.baidu.com/pypi/simple

下面是手写数字识别任务的完整代码,如果想直接运行代码,可以拷贝下面的完整代码到一个Python文件中运行。

import paddle
import numpy as np
from paddle.vision.transforms import Normalize
transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 下载数据集并初始化 DataSet
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
# 模型组网并初始化网络
lenet = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(lenet)
# 模型训练的配置准备,准备损失函数,优化器和评价指标
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
# 模型训练
model.fit(train_dataset, epochs=5, batch_size=64, verbose=1)
# 模型评估
model.evaluate(test_dataset, batch_size=64, verbose=1)
# 保存模型
model.save('./output/mnist')
# 加载模型
model.load('output/mnist')
# 从测试集中取出一张图片
img, label = test_dataset[0]
# 将图片shape从1*28*28变为1*1*28*28,增加一个batch维度,以匹配模型输入格式要求
img_batch = np.expand_dims(img.astype('float32'), axis=0)
# 执行推理并打印结果,此处predict_batch返回的是一个list,取出其中数据获得预测结果
out = model.predict_batch(img_batch)[0]
pred_label = out.argmax()
print('true label: , pred label: '.format(label[0], pred_label))
# 可视化图片
from matplotlib import pyplot as plt
plt.imshow(img[0])

The loss value printed in the log is the current step, and the metric is the average value of previous steps.
Epoch 1/5
step 938/938 [==============================] - loss: 0.0519 - acc: 0.9344 - 14ms/step
Epoch 2/5
step 938/938 [==============================] - loss: 0.0239 - acc: 0.9767 - 14ms/step
Epoch 3/5
step 938/938 [==============================] - loss: 0.0416 - acc: 0.9811 - 14ms/step
Epoch 4/5
step 938/938 [==============================] - loss: 0.0084 - acc: 0.9837 - 14ms/step
Epoch 5/5
step 938/938 [==============================] - loss: 0.0838 - acc: 0.9860 - 14ms/step
Eval begin...
step 157/157 [==============================] - loss: 1.7577e-04 - acc: 0.9844 - 6ms/step
Eval samples: 10000
true label: 7, pred label: 7
<matplotlib.image.AxesImage at 0x7feb8a585dd0>

以上代码使用 MNIST 数据集训练并测试了 LeNet 模型&#xff0c;并最终成功推理出了一张手写数字图片的标签&#xff0c;该图片推理结果是 7 &#xff08; pred label: 7&#xff09;&#xff0c;真实标签也是7 &#xff08;true label: 7&#xff09;。

简单地说&#xff0c;深度学习任务一般分为以下几个核心步骤&#xff1a;


  1. 数据集定义与加载
  2. 模型组网
  3. 模型训练与评估
  4. 模型推理

接下来逐个步骤介绍&#xff0c;帮助你快速掌握使用飞桨框架实践深度学习任务的方法。


3.1 数据集定义与加载

飞桨在 paddle.vision.datasets 下内置了计算机视觉&#xff08;Computer Vision&#xff0c;CV&#xff09;领域常见的数据集&#xff0c;如 MNIST、Cifar10、Cifar100、FashionMNIST 和 VOC2012 等。在本任务中&#xff0c;先后加载了 MNIST 训练集&#xff08;mode&#61;&#39;train&#39;&#xff09;和测试集&#xff08;mode&#61;&#39;test&#39;&#xff09;&#xff0c;训练集用于训练模型&#xff0c;测试集用于评估模型效果。

import paddle
from paddle.vision.transforms import Normalize
transform &#61; Normalize(mean&#61;[127.5], std&#61;[127.5], data_format&#61;&#39;CHW&#39;)
# 下载数据集并初始化 DataSet
train_dataset &#61; paddle.vision.datasets.MNIST(mode&#61;&#39;train&#39;, transform&#61;transform)
test_dataset &#61; paddle.vision.datasets.MNIST(mode&#61;&#39;test&#39;, transform&#61;transform)
# 打印数据集里图片数量
print(&#39; images in train_dataset, images in test_dataset&#39;.format(len(train_dataset), len(test_dataset)))

60000 images in train_dataset, 10000 images in test_dataset

飞桨除了内置了 CV 领域常见的数据集&#xff0c;还在 paddle.text 下内置了自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域常见的数据集&#xff0c;并提供了自定义数据集与加载功能的 paddle.io.Dataset 和 paddle.io.DataLoader API&#xff0c;详细使用方法可参考『数据集定义与加载』 章节。

另外在 paddle.vision.transforms 下提供了一些常用的图像变换操作&#xff0c;如对图像的翻转、裁剪、调整亮度等处理&#xff0c;可实现数据增强&#xff0c;以增加训练样本的多样性&#xff0c;提升模型的泛化能力。本任务在初始化 MNIST 数据集时通过 transform 字段传入了 Normalize 变换对图像进行归一化&#xff0c;对图像进行归一化可以加快模型训练的收敛速度。该功能的具体使用方法可参考『数据预处理』 章节。

更多参考&#xff1a;


  • 数据集定义与加载
  • 数据预处理

3.2 模型组网

飞桨的模型组网有多种方式&#xff0c;既可以直接使用飞桨内置的模型&#xff0c;也可以自定义组网。

『手写数字识别任务』比较简单&#xff0c;普通的神经网络就能达到很高的精度&#xff0c;在本任务中使用了飞桨内置的 LeNet 作为模型。飞桨在 paddle.vision.models 下内置了 CV 领域的一些经典模型&#xff0c;LeNet 就是其中之一&#xff0c;调用很方便&#xff0c;只需一行代码即可完成 LeNet 的网络构建和初始化。num_classes 字段中定义分类的类别数&#xff0c;因为需要对 0 ~ 9 的十类数字进行分类&#xff0c;所以设置为 10。

另外通过 paddle.summary 可方便地打印网络的基础结构和参数信息。

# 模型组网并初始化网络
lenet &#61; paddle.vision.models.LeNet(num_classes&#61;10)
# 可视化模型组网结构和参数
paddle.summary(lenet,(1, 1, 28, 28))

---------------------------------------------------------------------------
Layer (type) Input Shape Output Shape Param #
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
Conv2D-1 [[1, 1, 28, 28]] [1, 6, 28, 28] 60
ReLU-1 [[1, 6, 28, 28]] [1, 6, 28, 28] 0
MaxPool2D-1 [[1, 6, 28, 28]] [1, 6, 14, 14] 0
Conv2D-2 [[1, 6, 14, 14]] [1, 16, 10, 10] 2,416
ReLU-2 [[1, 16, 10, 10]] [1, 16, 10, 10] 0
MaxPool2D-2 [[1, 16, 10, 10]] [1, 16, 5, 5] 0
Linear-1 [[1, 400]] [1, 120] 48,120
Linear-2 [[1, 120]] [1, 84] 10,164
Linear-3 [[1, 84]] [1, 10] 850
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
Total params: 61,610
Trainable params: 61,610
Non-trainable params: 0
---------------------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.11
Params size (MB): 0.24
Estimated Total Size (MB): 0.35
---------------------------------------------------------------------------
&#39;total_params&#39;: 61610, &#39;trainable_params&#39;: 61610

通过飞桨的 paddle.nn.Sequential 和 paddle.nn.Layer API 可以更灵活方便的组建自定义的神经网络&#xff0c;详细使用方法可参考『模型组网』章节。

更多参考&#xff1a;


  • 模型组网

3.3 模型训练与评估


3.3.1 模型训练

模型训练需完成如下步骤&#xff1a;


  1. 使用 paddle.Model 封装模型。 将网络结构组合成可快速使用 飞桨高层 API 进行训练、评估、推理的实例&#xff0c;方便后续操作。
  2. 使用 paddle.Model.prepare 完成训练的配置准备工作。 包括损失函数、优化器和评价指标等。飞桨在 paddle.optimizer 下提供了优化器算法相关 API&#xff0c;在 paddle.nn Loss层 提供了损失函数相关 API&#xff0c;在 paddle.metric 下提供了评价指标相关 API。
  3. 使用 paddle.Model.fit 配置循环参数并启动训练。 配置参数包括指定训练的数据源 train_dataset、训练的批大小 batch_size、训练轮数 epochs 等&#xff0c;执行后将自动完成模型的训练循环。

因为是分类任务&#xff0c;这里损失函数使用常见的 CrossEntropyLoss &#xff08;交叉熵损失函数&#xff09;&#xff0c;优化器使用 Adam&#xff0c;评价指标使用 Accuracy 来计算模型在训练集上的精度。

# 封装模型&#xff0c;便于进行后续的训练、评估和推理
model &#61; paddle.Model(lenet)
# 模型训练的配置准备&#xff0c;准备损失函数&#xff0c;优化器和评价指标
model.prepare(paddle.optimizer.Adam(parameters&#61;model.parameters()),
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())
# 开始训练
model.fit(train_dataset, epochs&#61;5, batch_size&#61;64, verbose&#61;1)

The loss value printed in the log is the current step, and the metric is the average value of previous steps.
Epoch 1/5
step 938/938 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 0.0011 - acc: 0.9865 - 14ms/step
Epoch 2/5
step 938/938 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 0.0045 - acc: 0.9885 - 14ms/step
Epoch 3/5
step 938/938 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 0.0519 - acc: 0.9896 - 14ms/step
Epoch 4/5
step 938/938 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 4.1989e-05 - acc: 0.9912 - 14ms/step
Epoch 5/5
step 938/938 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 0.0671 - acc: 0.9918 - 15ms/step

从训练过程的打印日志中&#xff0c;可观察到损失函数值 loss 逐渐变小&#xff0c;精度 acc 逐渐上升的趋势&#xff0c;反映出不错的训练效果。


3.3.2 模型评估

模型训练完成之后&#xff0c;调用 paddle.Model.evaluate &#xff0c;使用预先定义的测试数据集&#xff0c;来评估训练好的模型效果&#xff0c;评估完成后将输出模型在测试集上的损失函数值 loss 和精度 acc。

# 进行模型评估
model.evaluate(test_dataset, batch_size&#61;64, verbose&#61;1)

Eval begin...
step 157/157 [&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;] - loss: 5.7177e-04 - acc: 0.9859 - 6ms/step
Eval samples: 10000
&#39;loss&#39;: [0.00057177414], &#39;acc&#39;: 0.9859

从结果可以看到&#xff0c;初步训练得到的模型精度在98%附近&#xff0c;在逐渐熟悉深度学习模型开发和训练技巧后&#xff0c;可以通过调整其中的训练参数来进一步提升模型的精度。

更多参考&#xff1a;


  • 模型训练、评估与推理

3.4 模型推理


3.4.1 模型保存

模型训练完成后&#xff0c;通常需要将训练好的模型参数和优化器等信息&#xff0c;持久化保存到参数文件中&#xff0c;便于后续执行推理验证。

在飞桨中可通过调用 paddle.Model.save 保存模型。代码示例如下&#xff0c;其中 output 为模型保存的文件夹名称&#xff0c;minst 为保存的模型文件名称。

# 保存模型&#xff0c;文件夹会自动创建
model.save(&#39;./output/mnist&#39;)

以上代码执行后会在output目录下保存两个文件&#xff0c;mnist.pdopt为优化器的参数&#xff0c;mnist.pdparams为模型的参数。

output
├── mnist.pdopt # 优化器的参数
└── mnist.pdparams # 模型的参数

3.4.2 模型加载并执行推理

执行模型推理时&#xff0c;可调用 paddle.Model.load 加载模型&#xff0c;然后即可通过 paddle.Model.predict_batch 执行推理操作。

如下示例中&#xff0c;针对前面创建的 model 网络加载保存的参数文件 output/mnist&#xff0c;并选择测试集中的一张图片 test_dataset[0] 作为输入&#xff0c;执行推理并打印结果&#xff0c;可以看到推理的结果与可视化图片一致。

# 加载模型
model.load(&#39;output/mnist&#39;)
# 从测试集中取出一张图片
img, label &#61; test_dataset[0]
# 将图片shape从1*28*28变为1*1*28*28&#xff0c;增加一个batch维度&#xff0c;以匹配模型输入格式要求
img_batch &#61; np.expand_dims(img.astype(&#39;float32&#39;), axis&#61;0)
# 执行推理并打印结果&#xff0c;此处predict_batch返回的是一个list&#xff0c;取出其中数据获得预测结果
out &#61; model.predict_batch(img_batch)[0]
pred_label &#61; out.argmax()
print(&#39;true label: , pred label: &#39;.format(label[0], pred_label))
# 可视化图片
from matplotlib import pyplot as plt
plt.imshow(img[0])

true label: 7, pred label: 7
<matplotlib.image.AxesImage at 0x7f853e6f0e50>

更多参考&#xff1a;


  • 模型保存与加载
  • 模型训练、评估与推理

四、总结

至此通过飞桨几个简单的API完成了一个深度学习任务&#xff0c;总结整个流程和用到的关键 API 如下图所示。



模型开发流程

推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
author-avatar
勉情于你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有